package com.bicon.botu.account.service;

import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.IService;
import com.bicon.botu.account.dto.AccountInfoDTO;
import com.bicon.botu.account.dto.AccountParam;
import com.bicon.botu.account.entity.AccountInfo;
import com.bicon.botu.account.param.RegisterParam;
import com.bicon.botu.core.base.common.entity.BaseResult;

/**
 * @auther liushujie
 * @date 2018/07/11 11:00
 */
public interface IAccountService extends IService<AccountInfo> {


    /**
     * 发送短信验证码
     *
     * @param phone 手机号
     * @return true发送成功、false 发送失败
     */
    boolean sendSmsCode(String phone, Integer type);

    /**
     * 生产验证码并返回，测试用
     * @param phone
     * @param type
     * @return
     */
    String sendSmsCodeString(String phone, Integer type);

    /**
     * 校验验证码
     *
     * @param phone 手机号
     * @param code  验证码
     * @return true验证成功、false 验证失败
     */
    boolean verifySmsCode(String phone, String code, Integer type);


    /**
     * 校验账户有没有被注册
     *
     * @param account 账号
     * @param type    操作类型（1移动端、2商户端、3平台端）
     * @return
     */
    boolean checkAccount(String account, Integer type);


    /**
     * web 后台用户登录
     *
     * @param account  账号
     * @param password 密码
     * @param type     登录类型
     * @return
     */
    String manageLogin(String account, String password, Integer type);


    /**
     * APP用户注册
     * @param account 账号
     * @param password 密码
     * @param thirdId 第三方id
     * @param thirdParty 第三方来源
     * @param source 来源平台
     * @return
     */
    AccountInfoDTO register(String account, String password, String thirdId, Integer thirdParty,Integer source);

    /**
     * 第三方注册绑定
     *
     * @return 返回token
     */
    AccountInfoDTO registerBind(RegisterParam registerParam);

    /**
     * APP用户登录
     *
     * @param accountParam
     * @return
     */
    String login(AccountParam accountParam);


    /**
     * 快捷登录 手机号、验证码登录
     *
     * @param accountParam
     * @return
     */
    String phoneLogin(AccountParam accountParam);


    /**
     * 忘记密码：后台，通过账号和手机号验证码修改密码
     *
     * @param account
     * @param password
     * @param type
     * @return
     */
    boolean forgetPassByAccout(String account, String password, Integer type);

    /**
     * 检查账号和手机号是否匹配存在
     *
     * @param account 账号
     * @param type    账号类型
     * @return
     */
    boolean checkAccountExist(String account, Integer type);

    /**
     * 账号详情
     *
     * @param account
     * @param type
     * @return
     */
    AccountInfoDTO detail(String account, Integer type);


    /**
     * 根据userID获取账号信息
     * @param userId
     * @param type
     * @return
     */
    AccountInfoDTO detailInfo(String userId, Integer type);

    /**
     * 第三方账号获取账户信息
     *
     * @param thirdId
     * @param thirdParty
     * @return
     */
    AccountInfoDTO thirdAccout(String thirdId, Integer thirdParty);


    /**************账号角色相关接口****************/
    /**
     * 获取用户角色列表
     *
     * @param userId 用户id
     * @return
     */
    BaseResult getAccountRole(String userId);



    /**
     * 分页查询账户列表
     *
     * @param pageNo   页码
     * @param pageSize 每页显示数量
     * @param type     登录类型（1移动端、2商户端、3平台端）
     * @return
     */
    Page<AccountInfoDTO> selectAccounts(int pageNo, int pageSize, Integer type);



    /**
     * 更新Account状态
     *
     * @param id     账号id
     * @param enable 是否启用0:启用、1：禁用
     * @return
     */
    boolean updateAccountState(String id, Integer enable);


    /**
     * 新增后台账号
     *
     * @param account  登录账号
     * @param password 登录密码
     * @param enable   类型：0：正常、1：禁用状态
     * @param type     登录类型（1移动端、2商户端、3平台端）
     * @return
     */
    boolean saveAccount(String account, String password, Integer enable, Integer type);


    /**
     * 更新账户信息
     *
     * @param id       id
     * @param account  账号
     * @param password 密码
     * @param type     登录类型（1移动端、2商户端、3平台端）
     * @return
     */
    boolean update(String id, String account, String password, Integer type);



    /**
     * 初始化app用户缓存
     *
     * @return
     */
    boolean initAccount();

    /**
     * 后台添加用户及角色
     *
     * @param account  账户
     * @param code     角色code
     * @param password 密码
     * @return
     */
    BaseResult addAccountAndRole(String account, String code,Integer type, String password);
}
